######################################################################
######################### COMMENTS ###################################
######################################################################

# This code was run on a iMac with Intel i5 Dual Core 8GB of RAM.
# R for R 4.0.1 GUI 1.72 Catalina build (7845)
# RStudio Version 1.3.959
# Operating System: MacOS Mojave 10.14.5

######################################################################
################ ENVIRONMENT SETUP ###################################
######################################################################

#Pacotes
library(labelled) 
library(memisc)
library(nnet)

#Carregamento dos bancos do ESEB e do LAPOP
load("eseb2002.RData")
load("eseb2006.RData")
load("eseb2010.RData")
load("eseb2014.RData")
load("eseb2018.RData")
load("LAPOP2019.RData")


##Recodificação para criação dos perfis de desafeição e cálculo das descritivas longitudinais.
 #Os percentuais de desafeição por grupo e ano constam na Tabela 1 do artigo.

#ESEB 2002
val_labels(eseb2002$Q87) <- NULL  
eseb2002$AntiPT <- recode(eseb2002$Q87, 1 <-0, 0 <- c(1:12))
val_labels(eseb2002$Q89) <- NULL
eseb2002$AntiPSDB <- recode(eseb2002$Q89, 10 <-0, 0 <- c(1:12))
val_labels(eseb2002$Q91) <- NULL
eseb2002$AntiPMDB <- recode(eseb2002$Q91, 100 <-0, 0 <- c(1:12))
eseb2002$AntPartido <- (eseb2002$AntiPT + eseb2002$AntiPSDB + eseb2002$AntiPMDB)
Table(eseb2002$AntPartido, percent=T) 

# ESEB 2006
val_labels(eseb2006$eseb15a) <- NULL
eseb2006$AntiPT <- recode(eseb2006$eseb15a, 1 <-0, 0 <- c(1:12))
val_labels(eseb2006$eseb15c) <- NULL
eseb2006$AntiPSDB <- recode(eseb2006$eseb15c, 10 <-0, 0 <- c(1:12))
val_labels(eseb2006$eseb15e) <- NULL
eseb2006$AntiPMDB <- recode(eseb2006$eseb15e, 100 <-0, 0 <- c(1:12))
eseb2006$AntPartido <- (eseb2006$AntiPT + eseb2006$AntiPSDB + eseb2006$AntiPMDB)
Table(eseb2006$AntPartido, percent=T)

# ESEB 2010
val_labels(eseb2010$v53) <- NULL
eseb2010$AntiPT <- recode(eseb2010$v53, 1 <-0, 0 <- c(1:12))
val_labels(eseb2010$v57) <- NULL
eseb2010$AntiPSDB <- recode(eseb2010$v57, 10 <-0, 0 <- c(1:12))
val_labels(eseb2010$v54) <- NULL
eseb2010$AntiPMDB <- recode(eseb2010$v54, 100 <-0, 0 <- c(1:12))
eseb2010$AntPartido <- (eseb2010$AntiPT + eseb2010$AntiPSDB + eseb2010$AntiPMDB)
Table(eseb2010$AntPartido, percent=T)

# ESEB 2014
val_labels(eseb2014$Q9A) <- NULL
eseb2014$AntiPT <- recode(eseb2014$Q9A, 1 <-0, 0 <- c(1:12))
val_labels(eseb2014$Q9E) <- NULL
eseb2014$AntiPSDB <- recode(eseb2014$Q9E, 10 <-0, 0 <- c(1:12))
val_labels(eseb2014$Q9B) <- NULL
eseb2014$AntiPMDB <- recode(eseb2014$Q9B, 100 <-0, 0 <- c(1:12))
eseb2014$AntPartido <- (eseb2014$AntiPT + eseb2014$AntiPSDB + eseb2014$AntiPMDB)
Table(eseb2014$AntPartido, percent=T)

# ESEB 2018
val_labels(eseb2018$Q1501) <- NULL
eseb2018$AntiPT <- recode(eseb2018$Q1501, 1 <-0, 0 <- c(1:12))
val_labels(eseb2018$Q1505) <- NULL
eseb2018$AntiPSDB <- recode(eseb2018$Q1505, 10 <-0, 0 <- c(1:12))
val_labels(eseb2018$Q1502) <- NULL
eseb2018$AntiPMDB <- recode(eseb2018$Q1502, 100 <-0, 0 <- c(1:12))
eseb2018$AntPartido <- (eseb2018$AntiPT + eseb2018$AntiPSDB + eseb2018$AntiPMDB)
Table(eseb2018$AntPartido, percent=T)

# LAPOP 2019
LAPOP2019$AntPT <- as.numeric(LAPOP2019$braantip1)
LAPOP2019$AntPT <- recode(LAPOP2019$AntPT, 1<-1, 0 <- c(2:10))
summary(LAPOP2019$AntPT)
LAPOP2019$AntPSDB <- as.numeric(LAPOP2019$braantip2)
LAPOP2019$AntPSDB <- recode(LAPOP2019$AntPSDB, 10<-1, 0 <- c(2:10))
summary(LAPOP2019$AntPSDB)

LAPOP2019$AntPMDB <- as.numeric(LAPOP2019$braantip3)
LAPOP2019$AntPMDB <- recode(LAPOP2019$AntPMDB, 100<-1, 0 <- c(2:10))
summary(LAPOP2019$AntPMDB)

# Além de usada na construção da primeira tipologia, as descritivas da medida abaixo
# fazem parte da Tabela 1 e foram apresentados no Gráfico 1.
LAPOP2019$AntPartido <- (LAPOP2019$AntPT + LAPOP2019$AntPSDB + LAPOP2019$AntPMDB)
#Table(LAPOP2019$AntPartido, percent=T) 
Table(LAPOP2019$AntPartido[which(LAPOP2019$AntPartido !=0)], percent=T) 

# Recodificações para criação da medida de tolerância com os dados do Lapop 2019. 
# As descritivas são apresentadas na Tabela 2 e no Gráfico 2.

LAPOP2019$IntPT <- as.numeric(LAPOP2019$braparap1)
LAPOP2019$IntPT <- recode(LAPOP2019$IntPT, 5<-1, 0 <- c(2:10))
summary(LAPOP2019$IntPT)
LAPOP2019$IntPSDB <- as.numeric(LAPOP2019$braparap2)
LAPOP2019$IntPSDB <- recode(LAPOP2019$IntPSDB, 50<-1, 0 <- c(2:10))
summary(LAPOP2019$IntPSDB)
LAPOP2019$IntPMDB <- as.numeric(LAPOP2019$braparap3)
LAPOP2019$IntPMDB <- recode(LAPOP2019$IntPMDB, 500<-1, 0 <- c(2:10))
summary(LAPOP2019$IntPMDB)

LAPOP2019$Intoler <- (LAPOP2019$IntPT + LAPOP2019$IntPSDB + LAPOP2019$IntPMDB)
Table(LAPOP2019$Intoler, percent=T)
Table(LAPOP2019$Intoler[which(LAPOP2019$Intoler != 0)], percent=T)


### Criação dos perfis (tipologia) combinando a medida de desafeição com a de tolerância
  # usando os dados o Lapop 2019. As duas tipologias são usadas nos modelos das Tabelas 3 e 5. 

## Tipologia 1 - com foco no antipetismo combinando as duas variáveis anteriores de desafeição e tolerância.
LAPOP2019$Tipo1 <- (LAPOP2019$AntPartido1 + LAPOP2019$Intoler) 
# redução das diversas combinações a 5 tipos como descrito no artigo e no Quadro 1.
LAPOP2019$Tipo1 <- recode(LAPOP2019$Tipo1, 0 <- c(0,5,50,55,500,505,550,555),
                  1 <- c(1, 51, 501), 2 <- c(2,7,52,57,502,507,552), 
                  3 <- c(6,56, 506, 556), 4 <- 557) 

# conversão em fator.
LAPOP2019$Tipo1 <- as.factor(LAPOP2019$Tipo1) 
# as descritivas dessa medida são apresentadas no Gráfico 3, descontados os casos da categoria "0".
#Table(LAPOP2019$Tipo1, percent=T)  
Table(LAPOP2019$Tipo1[which(LAPOP2019$Tipo1 !=0)], percent=T)  

## Tipologia 2 - com foco na abrangência. Foram redefinidas as medidas de desafeicão e tolerância para criação
 # desse nova tipologia.

# Recodificações para a criação da variável de desafeição
LAPOP2019$AntPT.num <- as.numeric(LAPOP2019$braantip1)
LAPOP2019$AntPT.num <- recode(LAPOP2019$AntPT.num, 1<-1, 0 <- c(2:10))
LAPOP2019$AntPSDB.num <- as.numeric(LAPOP2019$braantip2)
LAPOP2019$AntPSDB.num <- recode(LAPOP2019$AntPSDB.num, 1<-1, 0 <- c(2:10))
LAPOP2019$AntPMDB.num <- as.numeric(LAPOP2019$braantip3)
LAPOP2019$AntPMDB.num <- recode(LAPOP2019$AntPMDB.num, 1<-1, 0 <- c(2:10))

LAPOP2019$AntPartido.num <- (LAPOP2019$AntPT.num + LAPOP2019$AntPSDB.num + LAPOP2019$AntPMDB.num)


# Recodificações para a criação da variável de tolerância
LAPOP2019$IntPT.num <- as.numeric(LAPOP2019$braparap1)
LAPOP2019$IntPT.num <- recode(LAPOP2019$IntPT.num, 5<-1, 0 <- c(2:10))

LAPOP2019$IntPSDB.num <- as.numeric(LAPOP2019$braparap2)
LAPOP2019$IntPSDB.num <- recode(LAPOP2019$IntPSDB.num, 50<-1, 0 <- c(2:10))

LAPOP2019$IntPMDB.num <- as.numeric(LAPOP2019$braparap3)
LAPOP2019$IntPMDB.num <- recode(LAPOP2019$IntPMDB.num, 500<-1, 0 <- c(2:10))


LAPOP2019$Intoler.num <- (LAPOP2019$IntPT.num + LAPOP2019$IntPSDB.num + LAPOP2019$IntPMDB.num)

LAPOP2019$Intoler.num <- recode(LAPOP2019$Intoler.num, 0<-0, 5 <-c(5,50,500), 
                                50<-c(55,505,550),
                                500<-555)

# combina desafeição e tolerância.
LAPOP2019$Tipo2 <- (LAPOP2019$AntPartido.num + LAPOP2019$Intoler.num) 
# redução das diversas combinações a 7 tipos.
LAPOP2019$Tipo2 <- recode(LAPOP2019$Tipo2, 0<-c(0,5,50,500, 505, 550, 555), 
                               1<-1, 2<-c(2,7,8), 3<-3, 4<-c(6,51,501),
                               5 <- c(52,53,502), 6<-503) 

# redução dos tipos a 5, conforme descrito no artigo e também no Quadros 2.
LAPOP2019$Tipo2 <- recode(LAPOP2019$Tipo2, 0<-0, 1<-c(1,2), 
                                2<-3, 3<-c(4,5), 4<-6) 
# conversão em fator.
LAPOP2019$Tipo2 <- as.factor(LAPOP2019$Tipo2) 
# as descritivas dessa medida são apresentadas no Gráfico 4, descontados os casos da categoria "0".
#Table(LAPOP2019$Tipo2, percent=T) 
Table(LAPOP2019$Tipo2[which(LAPOP2019$Tipo2 != 0)], percent=T) 


#### Variáveis inseridas nos modelos como controles

#Sexo
LAPOP2019$Sexo <- as.numeric(LAPOP2019$sex)
LAPOP2019$Sexo <- recode(LAPOP2019$Sexo, 1<-1, 0<-2) # Alteração de masculino para 1 e feminino para 0.
LAPOP2019$Sexo <- as.factor(LAPOP2019$Sexo) # conversão para fator.

#Idade
LAPOP2019$Idade <-as.numeric(LAPOP2019$q2) # conversão em numérica.

#Escolaridade
LAPOP2019$ed # sem recodificações


#Etnia (Branco)
LAPOP2019$Etnia <- as.numeric(LAPOP2019$etid) # conversão em numérica.
LAPOP2019$Etnia <- recode(LAPOP2019$Etnia, 1<-1, 0<-c(3,4,5,7,1506)) # recodificação para isalar brancos.
LAPOP2019$Etnia <- as.factor(LAPOP2019$Etnia) # conversão em fator.

#Religião
LAPOP2019$Relig <- as.numeric(LAPOP2019$q3cn)# conversão em numérica.
LAPOP2019$Relig <- recode(LAPOP2019$Relig, 1<-1, 2<-c(2,5), 
                          3<-c(3,4,7,77,1501),
                          4 <-11) # recodificação agrupando categórias.
LAPOP2019$Relig <- as.factor(LAPOP2019$Relig) # conversão em fator. 

#Ideologia (tricotômica)
LAPOP2019$Ideol <- as.numeric(LAPOP2019$l1) # conversão em nunérica.
LAPOP2019$IdeolTri <- recode(LAPOP2019$Ideol, 0 <-c(1,2,3), 
                             1 <- c(4,5,6,7), 2<-c(8,9,10)) # recodificação para agrupar extremos.
LAPOP2019$IdeolTri <- factor(LAPOP2019$IdeolTri, 
                             labels = c("Esquerda", 
                                        "Centro","Direita")) # define rótulos.

#Aprovação do casamento de pessoas do mesmo sexo
LAPOP2019$Casam <- as.numeric(LAPOP2019$d6) # conversão como numérica.

#Apoio a flexibilização da posse de armas
LAPOP2019$Arma <- as.numeric(LAPOP2019$arm2) # conversão como numérica.
LAPOP2019$Arma <- recode(LAPOP2019$Arma, 0<-2, 1<-1) # recodificação para Não passar a 0 e Sim a 1.

#Avalia sociotrópica da economia
LAPOP2019$AvalSoc <- as.numeric(LAPOP2019$soct2) # conversão como numérica.
LAPOP2019$AvalSoc <- recode(LAPOP2019$AvalSoc, 0<-3, 1<-2, 2<-1) # inversão da escala.

### Variável dependente
LAPOP2019$Voto <- as.numeric(LAPOP2019$vb3n)# Conversão em numérica
LAPOP2019$Voto <- recode(LAPOP2019$Voto, 1<-1501, 2<-1502, 
                         3<-1503, 4<-c(0,97,1504,1504,1506,
                                       1508,1509,1510, 1577)) # reducação agrupando "outros".
LAPOP2019$VotoFator <- factor(LAPOP2019$Voto, 
                         labels = c("Bolsonaro", 
                                    "Haddad","Ciro","Outros")) # conversão em fator atribuindo rótulos.

LAPOP2019$VotoDic <- recode(LAPOP2019$Voto, 1<-1, 0 <- c(2:4)) #Dicotomização para voto em Bolsonaro.

#### MODELOS 
#Modelo 1
Mod1.VotoDic <- glm(VotoDic ~ Tipo1+Sexo+Idade+ed+Etnia+Relig+
                      IdeolTri+Casam+Arma+AvalSoc, data = LAPOP2019,
                      family = binomial(link = "logit"))
summary(Mod1.VotoDic)
# B e exp(B) apresentados na Tabela 3.
exp(coef(Mod1.VotoDic)) 

#Definição de perfis para cálculo de probabilidades preditas
newdata1 = data.frame(Tipo1 = c("0", "1", "2", "3", "4"), 
                      Sexo = c("1","1", "1", "1", "1"), 
                      Idade = c(39, 39, 39, 39, 39),
                      ed = c(9, 9, 9, 9, 9),
                      Etnia = c("0", "0", "0", "0", "0"),
                      Relig = c("1", "1","1","1","1"), 
                      IdeolTri = c("Centro", "Centro", "Centro", "Centro", "Centro"),
                      Casam = c(5,5,5,5, 5), 
                      Arma = c(4, 4, 4, 4, 4), 
                      AvalSoc = c(1,1,1,1,1))

# probabilidades preditas para os quatro perfis criados no newdata1, apresentadas na Tabela 4.
pred1 <- predict(Mod1.VotoDic, newdata1, level=0) 
pred1



Mod2.VotoDic <- glm(VotoDic ~ Tipo2+Sexo+Idade+ed+Etnia+Relig+
                      IdeolTri+Casam+Arma+AvalSoc, data = LAPOP2019,
                      family = binomial(link = "logit"))
summary(Mod2.VotoDic)
# B e exp(B) apresentados na Tabela 5.
exp(coef(Mod2.VotoDic)) 

newdata2 = data.frame(Tipo2 = c("0", "1", "2", "3", "4"), 
                     Sexo = c("1","1", "1", "1", "1"), 
                     Idade = c(39, 39, 39, 39, 39),
                     ed = c(9, 9, 9, 9, 9),
                     Etnia = c("0", "0", "0", "0", "0"),
                     Relig = c("1", "1","1","1","1"),  
                     IdeolTri = c("Centro", "Centro", "Centro", "Centro", "Centro"),
                     Casam = c(5,5,5,5, 5), 
                     Arma = c(4, 4, 4, 4, 4), 
                     AvalSoc = c(1,1,1,1,1))

# probabilidades preditas para os quatro perfis criados no newdata1, apresentadas na Tabela 6.                   
pred2 <- predict(Mod2.VotoDic, newdata2, level=0)  
pred2

#############################################
################# ANEXOS ####################
#############################################

# Estatísticas descritivas por grupo de desafeição para Tabela A.
tapply(LAPOP2019$Sexo, LAPOP2019$AntPartido, Table, percent = T)
aggregate(ed ~ AntPartido, LAPOP2019, mean)
tapply(LAPOP2019$Etnia, LAPOP2019$AntPartido, Table, percent = T)
aggregate(Idade ~ AntPartido, LAPOP2019, mean)

#Recriação das variáveis de desafeição e tolerância com cortes no ponto 3 das escalas
#com o objetivo de criar nova tipologia e testar a consistência da escolha dos autores.

#Desafeição
LAPOP2019$AntPT.num_1.3 <- as.numeric(LAPOP2019$braantip1)
LAPOP2019$AntPT.num_1.3 <- recode(LAPOP2019$AntPT.num_1.3, 1<-c(1:3), 0 <- c(4:10))

LAPOP2019$AntPSDB.num_1.3 <- as.numeric(LAPOP2019$braantip2)
LAPOP2019$AntPSDB.num_1.3 <- recode(LAPOP2019$AntPSDB.num_1.3, 1<-c(1:3), 0 <- c(4:10))

LAPOP2019$AntPMDB.num_1.3 <- as.numeric(LAPOP2019$braantip3)
LAPOP2019$AntPMDB.num_1.3 <- recode(LAPOP2019$AntPMDB.num_1.3, 1<-c(1:3), 0 <- c(4:10))

LAPOP2019$AntPartido.num_1.3 <- (LAPOP2019$AntPT.num_1.3 + LAPOP2019$AntPSDB.num_1.3 + LAPOP2019$AntPMDB.num_1.3)
Table(LAPOP2019$AntPartido.num_1.3, percent=T)

#Tolerância
LAPOP2019$IntPT.num_1.3 <- as.numeric(LAPOP2019$braparap1)
LAPOP2019$IntPT.num_1.3 <- recode(LAPOP2019$IntPT.num_1.3, 5<-1, 0 <- c(2:10))

LAPOP2019$IntPSDB.num_1.3 <- as.numeric(LAPOP2019$braparap2)
LAPOP2019$IntPSDB.num_1.3 <- recode(LAPOP2019$IntPSDB.num_1.3, 50<-1, 0 <- c(2:10))

LAPOP2019$IntPMDB.num_1.3 <- as.numeric(LAPOP2019$braparap3)
LAPOP2019$IntPMDB.num_1.3 <- recode(LAPOP2019$IntPMDB.num_1.3, 500<-1, 0 <- c(2:10))

LAPOP2019$Intoler.num_1.3 <- (LAPOP2019$IntPT.num_1.3 + LAPOP2019$IntPSDB.num_1.3 + LAPOP2019$IntPMDB.num_1.3)
Table(LAPOP2019$Intoler.num_1.3, percent=T)

LAPOP2019$Intoler.num_1.3 <- recode(LAPOP2019$Intoler.num_1.3, 0<-0, 5 <-c(5,50,500), 
                                    50<-c(55,505,550),
                                    500<-555)
LAPOP2019$Tipo1Reduz_1.3 <- as.factor(LAPOP2019$Tipo1Reduz_1.3)
Table(LAPOP2019$Intoler.num_1.3, percent=T)

LAPOP2019$Intoler.num_1.3[LAPOP2019$Intoler.num_1.3 == 0] <- NA

#Modelo para os resultados da Tabela B
Mod1.VotoDic_1.3 <- glm(VotoDic ~ Tipo1.fator_1.3+Sexo+Idade+ed+Etnia+Relig+
                          IdeolTri+Casam+Arma+AvalSoc, data = LAPOP2019,
                        family = binomial(link = "logit"))
summary(Mod1.VotoDic_1.3)
exp(coef(Mod1.VotoDic_1.3))

#Modelos multinomiais para versões alternativas do modelo para voto considerando quatro candidatos.

# Resultados para Tabela C
Mod.Voto.MultinC <- multinom(Voto ~ Tipo1+Sexo+Idade+ed+Etnia+Relig+
                                    IdeolTri+Casam+Arma+AvalSoc, data = LAPOP2019)
summary(Mod.Voto.MultinC)
exp(coef(Mod.Voto.MultinC))

# Resultados para Tabela D
Mod.Voto.MultinD <- multinom(Voto ~ Tipo2+Sexo+Idade+ed+Etnia+Relig+
                               IdeolTri+Casam+Arma+AvalSoc, data = LAPOP2019)
summary(Mod.Voto.MultinD)
exp(coef(Mod.Voto.MultinD))


